<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // promise
      // promise 异步回调放置于 .then 里面跑，还可以链式调用（如果返回 pormise，获取 resolve，否则值）
      // promise().then(cb).then();

      // async / await  语法糖：它和 promise 的逻辑一模一样，只是写法不同
      function wait(n) {
        return new Promise((res) => {
          setTimeout(() => {
            res(`等待${n}毫秒`);
          }, n);
        });
      }

      // 隔1秒，打印一下 res，再隔一秒，再打印一下 res
      function waitByPromise() {
        return (
          wait(1000)
            .then((res) => {
              console.log(res);
              return wait(1000); // return 的 如果是 promise
            })
            // 一段时间以后
            .then((res) => {
              console.log(res);
            })
        );
      }

      // function 前面加上 aysnc（异步）
      async function waitByAsync() {
        const res1 = await wait(1000); // await 一段时间以后
        console.log(res1); // 相当于在 .then 里面运行了
        const res2 = await wait(1000);
        console.log(res2);
      }

      // 空的 async await !必然会返回 Promise
      async function empty() {
        console.log(123);
      }

      // 实际上是等于立即返回的 Promise
      function promiseResolve() {
        return new Promise((res) => {
          res(123);
        });
      }
      // Promise.resolve 当前宏任务之后执行的微任务
      Promise.resolve;
    </script>
  </body>
</html>
